#include <iostream>
#include <set>

template <typename T>
void Print(const T &v)
{
    for (auto ite = v.begin(); ite != v.end(); ite++)
    {
        std::cout << *ite << " ";
    }
    std::cout << std::endl;
}

struct Student
{
    int id;
    std::string name;
};

bool operator>(const Student &s1, const Student &s2)
{

    return s1.name > s2.name;
}

std::ostream &operator<<(std::ostream &os, const Student &s)
{
    os << s.id << " " << s.name << std::endl;
    return os;
}

int main()
{
    // int a[]={5,3,6,9,8};
    // std::set<int> s;
    // for(int i=0;i<5;i++)
    // {
    //     s.insert(a[i]);
    // }
    // //s.insert(3);
    // std::set<int>::iterator ite=s.find(3);
    // if(ite!=s.end())
    //     s.erase(ite);
    // //s.erase(3);
    // Print(s);
    std::set<Student, std::greater<Student>> s;

    s.insert({1, "zhangshan"});
    s.insert({2, "lisi"});
    s.insert({3, "wangwu"});
    Print(s);
    return 0;
}